package com.gov.ec.rsv.servicio;

import com.gov.ec.rsv.dao.CrudDAO;
import com.gov.ec.rsv.interfaces.IDetCabReservacionServicio;
import com.gov.ec.rsv.modelo.Detreservacion;
import java.util.ArrayList;
import java.util.List;

import javax.ejb.Stateless;
import javax.ejb.LocalBean;
import javax.persistence.Query;
import org.apache.log4j.Logger;

/**
 *
 * @author 
 */
@Stateless
@LocalBean
public class DetCabReservacionServicio extends CrudDAO implements IDetCabReservacionServicio {

    /** La variable localLogger. */
    public static Logger localLogger = Logger.getLogger(Detreservacion.class);

    /* (non-Javadoc)
	 * @see com.gov.ec.rsv.servicio.IDetCabReservacionServicio#actualizar(java.util.List)
	 */
    @Override
	public void actualizar(List<Detreservacion> lista) {
        try {
            for (Detreservacion detalle : lista) {
                super.actualizar(detalle);
            }
        } catch (Exception e) {
            localLogger.error(e);
        }
    }

    /* (non-Javadoc)
	 * @see com.gov.ec.rsv.servicio.IDetCabReservacionServicio#buscarDetalleProforma(short, short, long)
	 */
    @Override
	@SuppressWarnings("unchecked")
	public List<Detreservacion> buscarDetalleProforma(final short idPeriodo, final short idSucursal, final long idProforma) {
        try {
            Query query = super.em.createQuery("select o from Detreservacion as  o "
                    + "where o.DetreservacionPK.idPeriodo = ?1 and o.DetreservacionPK.idSucursal = ?2 "
                    + "and o.DetreservacionPK.idProforma = ?3");
            query.setParameter(1, idPeriodo);
            query.setParameter(2, idSucursal);
            query.setParameter(3, idProforma);
            return query.getResultList();
        } catch (Exception e) {
            localLogger.error("No se puede buscar el detalle de la proforma.", e);
            return new ArrayList<Detreservacion>();
        }
    }

    /* (non-Javadoc)
	 * @see com.gov.ec.rsv.servicio.IDetCabReservacionServicio#buscarDetalleProforma(short, long, long, java.util.List)
	 */
    @Override
	@SuppressWarnings("unchecked")
	public List<Detreservacion> buscarDetalleProforma(short idPeriodo,
            long idSucursal, long idProforma, List<Integer> noReg) {
        try {
            String notIn = noReg.isEmpty() ? "" : "and o.DetreservacionPK.noReg not in (" + noReg + ")";
            Query query = super.em.createQuery("select o from Detreservacion as  o "
                    + "where o.DetreservacionPK.idPeriodo = ?1 and o.DetreservacionPK.idSucursal = ?2 "
                    + "and o.DetreservacionPK.idProforma = ?3 " + notIn);
            query.setParameter(1, idPeriodo);
            query.setParameter(2, idSucursal);
            query.setParameter(3, idProforma);
            return query.getResultList();
        } catch (Exception e) {
            localLogger.error("No se puede buscar el detalle de la proforma.", e);
            return new ArrayList<Detreservacion>();
        }
    }
    
     /* (non-Javadoc)
	 * @see com.gov.ec.rsv.servicio.IDetCabReservacionServicio#buscarDetalleFactura(short, short, long, java.util.List)
	 */
    @Override
	@SuppressWarnings("unchecked")
	public List<Detreservacion> buscarDetalleFactura(short idPeriodo,
            short idSucursal, long idFactura, List<Integer> noReg) {
        try {
            Query query = super.em.createNativeQuery("SELECT DISTINCT A.ID_PROFORMA, A.ID_PERIODO "
                    + ", A.ID_SUCURSAL, B.OBS_FACTURA, B.ESTADO, B.V_CREDITO, B.V_EFECTIVO, B.V_DEPOSITO "
                    + ", A.CANTIDAD, A.PVP_TOTAL, A.TIPO_ITEM, A.ID_FACTURA "
                    + " FROM Detreservacion A, TFACTURA B WHERE A.ID_FACTURA = B.ID_FACTURA"
                    + " AND A.ID_PERIODO = B.ID_PERIODO AND A.ID_SUCURSAL = B.ID_SUCURSAL"
                    + " AND A.ID_PERIODO = ?1  AND A.ID_SUCURSAL = ?2 AND A.ID_FACTURA = ?3")
                    ;//+ notIn);
            query.setParameter(1, idPeriodo);
            query.setParameter(2, idSucursal);
            query.setParameter(3, idFactura);
            return query.getResultList();
        } catch (Exception e) {
            localLogger.error("No se puede buscar el detalle de la Factura.", e);
            return new ArrayList<Detreservacion>();
        }
    }
    
    
}
